<?php
//include_once('DB.class.php');
class Uzytkownik{
	protected $BD;
	public $id_uzytkownik;
	
	function __construct($BD){
		//require_once('bazadanych.class.php');
		//$this->BD = new cBazaDanych();
		$this->BD = $BD;
		if (!empty($_SESSION['id_uzytkownik'])) $this->id_uzytkownik = $_SESSION['id_uzytkownik'];
		else $this->id_uzytkownik = 0;
	}
	
	public function Dodaj($dane){
		//echo 'dodawanie uzytkownika';
		// id_uzytkownik, nick, email, haslo, id_prawo, klikniec, ocen, newsow
		$dane['id_uzytkownik'] = $this->BD->Max('uzytkownicy', 'id_uzytkownik') + 1;
		if (!$this->Istnieje($dane)){
			//echo 'uzytkownik nie istnieje, ';
			$dane['haslo'] = sha1($dane['haslo']);
			$wynik = $this->BD->Insert('uzytkownicy', $dane, false);
			if ($wynik == false){
				echo 'Nie mozna dodac uzytkownika przy pomocy tego zapytania. ';
				return false;
			}
			else{
				return $this->ZwiekszNewsy($dane['id_uzytkownik']);
			}
		}
		else return false;
	}
	
	public function Usun($id_uzytkownik){
		$sql = "DELETE FROM `uzytkownicy` WHERE `id_uzytkownik` = $id_uzytkownik;";
		if ($this->BD->Zapytanie($sql, true) != false) return true;
		else return false;
	}
	
	public function Uaktualnij($dane){
		if ($dane['haslo'] == '') unset($dane['haslo']);
		else $dane['haslo'] = sha1($dane['haslo']);
		return $this->BD->Update('uzytkownicy', $dane, 'id_uzytkownik', true);
	}
	
	public function ZwiekszNewsy($id_uzytkownik){
		$sql = "UPDATE `uzytkownicy` SET `newsow` = `newsow` + 1 WHERE `id_uzytkownik` = $id_uzytkownik;";
		return $this->BD->Zapytanie($sql, false, true);
	}
	
	public function ZmniejszNewsy($id_uzytkownik){
		$sql = "UPDATE `uzytkownicy` SET `newsow` = `newsow` - 1 WHERE `id_uzytkownik` = $id_uzytkownik;";
		return $this->BD->Zapytanie($sql, false, true);
	}
	
	public function ZliczKlikniecie($id_uzytkownik){
		$sql = "UPDATE `uzytkownicy` SET `klikniec` = `klikniec` + 1 WHERE `id_uzytkownik` = $id_uzytkownik;";
		return $this->BD->Zapytanie($sql, false, true);
	}
	
	public function LiczbaNewsow($id_uzytkownik){
		$sql = "SELECT `uzytkownicy` FROM `serwisy` WHERE `id_uzytkownik` = $id_uzytkownik;";
		return $this->BD->ZapytanieOLiczbe($sql);
	}
	
	private function Istnieje($dane){
		//echo 'sprawdzanie czy istnieje, ';
		$sql = "SELECT COUNT(`id_uzytkownik`) l FROM `uzytkownicy` WHERE `nick` = '{$dane['nick']}' ";
		if (!empty($dane['haslo'])) $sql .= " AND `haslo` = '".sha1($dane['haslo'])."'";
		$sql .= ';';
		//echo $sql;
		$etap1 = $this->BD->ZapytanieOLiczbe($sql);
		if (!empty($dane['email'])){
			$sql = "SELECT COUNT(`id_uzytkownik`) l FROM `uzytkownicy` WHERE email = '{$dane['email']}';";
			$etap2 = $this->BD->ZapytanieOLiczbe($sql);
			if ($etap1 == 0 && $etap2 == 0) return false;
			else return true;
		}
		if ($etap1 > 0) return true;
		else return false;
	}
	
	public function Zaloguj($dane = false){
		if (isset($_COOKIE['zalogowany'])){
			//echo 'jest w cookie, przedluzam ich waznosc, ';
			setcookie('zalogowany', 1, time()+1*3600, '/');
			setcookie('nick', $_COOKIE['nick'], time()+3600, '/');
			setcookie('haslo', $_COOKIE['haslo'], time()+3600, '/');
			session_register('uprawnienia');
			$_SESSION['uprawnienia'] = $this->PoziomUprawnien($_COOKIE['nick']);
			session_register('id_uzytkownik');
			$_SESSION['id_uzytkownik'] = $this->IdUzytkownika($_COOKIE['nick']);
			$this->id_uzytkownik = $_SESSION['id_uzytkownik'];
			return true;
		}
		else if ($dane != false){
			if ($this->Istnieje($dane)){
				$wynik = setcookie('nick', $dane['nick'], time()+3600, '/');
				if ($wynik){
					setcookie('zalogowany', 1, time()+1*3600, '/');
					setcookie('haslo', sha1($dane['haslo']), time()+3600, '/');
					session_register('uprawnienia');
					$_SESSION['uprawnienia'] = $this->PoziomUprawnien($dane['nick']);
					session_register('id_uzytkownik');
					$_SESSION['id_uzytkownik'] = $this->IdUzytkownika($dane['nick']);
					$this->id_uzytkownik = $_SESSION['id_uzytkownik'];
					return true;
				}
				else{ 
					echo 'Nie mozna ustawic ciasteczka przy logowaniu.';
					return false;
				}
			}
			else return false;
		}
	}
	
	public function Wyloguj(){
		setcookie('zalogowany', '', -30, '/');
		setcookie('nick', '', -30, '/');
	}
	
	private function PoziomUprawnien($nick){
		$sql = "SELECT `id_prawo` FROM `uzytkownicy` WHERE `nick` = '$nick';";
		return $this->BD->ZapytanieOLiczbe($sql);
	}
	
	public function Prawa($id){
		if ($id == false) $sql = "SELECT * FROM `uzytkownicy_prawa`;";
		else $sql = "SELECT * FROM `uzytkownicy_prawa` WHERE `id_prawo` = $id;";
		return $this->BD->Zapytanie($sql, true, true);
	}
	
	public function DodajPrawo($dane){
		if (empty($dane['id_prawo'])) $dane['id_prawo'] = $this->BD->Max('uzytkownicy_prawa', 'id_prawo') + 1;
		return $this->BD->Insert('uzytkownicy_prawa', $dane, true);
	}
	
	public function UaktualnijPrawa($dane){
		return $this->BD->Update('uzytkownicy_prawa', $dane, 'id_prawo', true);
	}
	
	private function IdUzytkownika($nick){
		$sql = "SELECT `id_uzytkownik` FROM `uzytkownicy` WHERE `nick` = '$nick';";
		return $this->BD->ZapytanieOLiczbe($sql);
	}
	
	public function Dane($id){
		if ($id == false) $sql = "SELECT * FROM `uzytkownicy`;";
		else $sql = "SELECT * FROM `uzytkownicy` WHERE `id_uzytkownik` = $id;";
		$wynik = $this->BD->Zapytanie($sql, true, true);
		if($id != false) return $wynik[0];
		return $wynik;
	}
	
	public function Statystyki($top, $dziedzina){
		$sql = "SELECT * FROM `uzytkownicy` ORDER BY `$dziedzina` DESC ";
		if ($top != false) $sql .= "LIMIT $top";
		$sql .= ";";
		$wszystkie_dane = $this->BD->Zapytanie($sql, true, true);
		$tmp;
		foreach ($wszystkie_dane as $nr => $dane){
			$tmp[$dane['id_uzytkownik']] = $dane;
		}
		return $tmp;		
	}
	
	public function UaktualnijStatystyki(){
		$sql = "SELECT COUNT(id_uzytkownik) newsow, id_uzytkownik FROM newsy GROUP BY id_uzytkownik;";
		$dane = $this->BD->Zapytanie($sql, true, true);
		foreach ($dane as $indeks => $wartosc){
			$sql = "UPDATE `uzytkownicy` SET `newsow` = {$wartosc['newsow']} WHERE `id_uzytkownik` = {$wartosc['id_uzytkownik']};";
			$this->BD->Zapytanie($sql, false, true);
		}
		return true;
	}
}

?>